Buefy is a UI framework that’s based on Bulma.
In this article, we’ll look at how to use Buefy in our Vue app.
Skeleton Loading Placeholder
Buefy comes with a skeleton component that we can use as a placeholder to show when content is loading.
To add it, we can use the b-skeleton component:
<template>
<section>
<b-skeleton width="20%" animated></b-skeleton>
<b-skeleton width="40%" animated></b-skeleton>
<b-skeleton width="60%" animated></b-skeleton>
<b-skeleton width="80%" animated></b-skeleton>
</section>
</template>
<script>
export default {
data() {
return {};
},
methods: {}
};
</script>
width has the width of the bar as the percentage of the screen viewport.
animated makes it animated.
Also, we can add a circle placeholder with the circle prop:
<template>
<section>
<figure class="media-left">
<p class="image is-64x64">
<b-skeleton circle width="64px" height="64px"></b-skeleton>
</p>
</figure>
</section>
</template>
<script>
export default {
data() {
return {};
},
methods: {}
};
</script>
Sidebar
We can add a sidebar with the b-sidebar component.
For instance, we can write:
<template>
<section>
<b-sidebar
type="is-light"
:fullheight="fullheight"
:fullwidth="fullwidth"
:overlay="overlay"
:right="right"
v-model="open"
>
<div class="p-1">
<img src="https://picsum.photos/id/1/100/50" alt="logo">
<b-menu>
<b-menu-list label="Menu">
<b-menu-item label="Info"></b-menu-item>
<b-menu-item icon="settings">
<template slot="label" slot-scope="props">Administrator
<b-icon class="is-pulled-right" :icon="props.expanded ? 'menu-down' : 'menu-up'"></b-icon>
</template>
<b-menu-item label="Users"></b-menu-item>
<b-menu-item>
<template slot="label">Devices
<b-dropdown aria-role="list" class="is-pulled-right" position="is-bottom-left">
<b-icon icon="dots-vertical" slot="trigger"></b-icon>
<b-dropdown-item>action 1</b-dropdown-item>
<b-dropdown-item>action 2</b-dropdown-item>
</b-dropdown>
</template>
</b-menu-item>
</b-menu-item>
</b-menu-list>
<b-menu-list label="Actions">
<b-menu-item label="Logout"></b-menu-item>
</b-menu-list>
</b-menu>
</div>
</b-sidebar>
</section>
</template>
<script>
export default {
data() {
return {
open: true,
overlay: true,
fullheight: true,
fullwidth: false,
right: false
};
}
};
</script>
<style>
.p-1 {
padding: 1em;
}
</style>
to add a sidebar with the b-sidebar component.
type sets the color style.
fullHeight makes it full height.
fullWidth makes it full width.
overlay add an overlay below the sidebar.
right makes it display on the right.
v-model controls the open state of the sidebar.
We can make it static with the position prop et to 'static' :
<template>
<section>
<b-sidebar
position="static"
:fullheight="fullheight"
:fullwidth="fullwidth"
:right="right"
v-model="open"
>
<div class="p-1">
<img src="https://picsum.photos/id/1/100/50" alt="logo">
<b-menu>
<b-menu-list label="Menu">
<b-menu-item label="Info"></b-menu-item>
<b-menu-item icon="settings">
<template slot="label" slot-scope="props">Administrator
<b-icon class="is-pulled-right" :icon="props.expanded ? 'menu-down' : 'menu-up'"></b-icon>
</template>
<b-menu-item label="Users"></b-menu-item>
<b-menu-item>
<template slot="label">Devices
<b-dropdown aria-role="list" class="is-pulled-right" position="is-bottom-left">
<b-icon icon="dots-vertical" slot="trigger"></b-icon>
<b-dropdown-item>action 1</b-dropdown-item>
<b-dropdown-item>action 2</b-dropdown-item>
</b-dropdown>
</template>
</b-menu-item>
</b-menu-item>
</b-menu-list>
<b-menu-list label="Actions">
<b-menu-item label="Logout"></b-menu-item>
</b-menu-list>
</b-menu>
</div>
</b-sidebar>
</section>
</template>
<script>
export default {
data() {
return {
open: true,
overlay: true,
fullheight: true,
fullwidth: false,
right: false
};
}
};
</script>
<style>
.p-1 {
padding: 1em;
}
</style>
Conclusion
We can add placeholders to show when content is loading and a sidebar with Buefy.